#ifndef _TD_MAGIKOOPA_TOWER_H_
#define _TD_MAGIKOOPA_TOWER_H_

/************************************************************************/
/* Game                                                                 */
/************************************************************************/
#include "Game/Game Objects/Towers/BaseTower.h"
#include "Game/Factories/ShotFactory.h"


using namespace std;
using namespace TD_Core;

namespace TD_Game {

	class MagikoopaTower : public BaseTower {

		/************************************************************************/
		/* Magikoopa tower definitions                                          */
		/************************************************************************/
		static const int shootingInterval[NUMBER_OF_LEVELS];
		static const unsigned int towerRadius[NUMBER_OF_LEVELS];
		static const unsigned int towerDamage[NUMBER_OF_LEVELS];
		static const unsigned int towerPrice[NUMBER_OF_LEVELS];
		static const unsigned int towerValue[NUMBER_OF_LEVELS];
		static const string towerName;


	protected:
		
		static const MagikoopaTower * m_pStaticReference;
		static shared_ptr<SDLSound> m_pHittedSound;
		static shared_ptr<SDLSound> m_pLaunchSound;

		/************************************************************************/
		/* Protected functions                                                  */
		/************************************************************************/
		void initBaseValues();

	public:

		/************************************************************************/
		/* ctors and dtors					                                    */
		/************************************************************************/
		//Default constructor
		explicit MagikoopaTower();

		//Copy constructor
		explicit MagikoopaTower(const MagikoopaTower &rhs);

		//Assignment constructor
		MagikoopaTower& operator=(const MagikoopaTower &rhs);

		//Initialization constructor
		MagikoopaTower(unsigned int g_ID, const Coord2D & turretPosition);

		//Destructor
		~MagikoopaTower();

		/************************************************************************/
		/* Access functions                                                     */
		/************************************************************************/
		static inline const MagikoopaTower * getStaticReference() {
			if(m_pStaticReference ==  NULL) {
				m_pStaticReference = new MagikoopaTower();
				m_pLaunchSound = TD_Resources::ResourceManager::loadSound("SFX/sounds/magikoopaShot.wav");
				m_pHittedSound = TD_Resources::ResourceManager::loadSound("SFX/sounds/magikoopahit.wav");
			}
			return(m_pStaticReference);
		}

	};
}

#endif